﻿package work.chongqing;

import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.log4j.Logger;

public class ChongQing {

	Logger log = Logger.getLogger(ChongQing.class);

	// 根据标准平台中北京市地方标准，生成符合重庆所要求的数据
	// 主要是数据库字段名称不一致，重新对应一次
	// 由于手工完善了几项平台中没有的数据项，所以不要清空或者删除 chongqing 表
	// 重庆表的含义，参见标准馆的录入规则文档
	// 参见 《标准数据著录规则_modifyBy_apollo_2007.12.04.doc》
	
	public void creatChongqing() {

		// oracle_trs
		Connection conn_oracle = null;
		Oracle_std oracle = new Oracle_std();
		conn_oracle = oracle.getConnection(conn_oracle);

		Statement oracle_stmt = null;
		ResultSet oracle_rs = null;

		// mysql
		Connection mysqlConn = null;
		MySQL mysql = new MySQL();
		mysqlConn = mysql.getConnection(mysqlConn);

		Statement mysql_stmt_select = null;
		ResultSet mysql_select_rs = null;

		Statement mysql_stmt_update = null;
		//Statement mysql_stmt_insert = null;

		int countUpdateNumber = 0;
		int countInsertNumber = 0;

		String standardTable = "st_standard";
		String chongqingTable = "chongqing1";

		// 我单位平台中的字段和重庆字段对应情况
		// ID 标准号ID
		long ID = 0; // 对应重庆字段

		// 标准号
		String STANDARD_CODE = "";// 对应重庆字段 a100

		// 标准中文名称
		String NAMECN = "";// 对应重庆字段 a298

		// 标准英文名称
		String NAMEEN = "";// 对应重庆字段 a302

		// 发布日期（只到某日就行）
		Date ISSUE_TIME = null;// 对应重庆字段 a101

		// 实施日期（只到某日就行）
		Date ACT_TIME = null;// 对应重庆字段 a205

		// 发布单位
		String ISSUE_DEPT = "";// 对应重庆字段 a102

		// 提出单位
		String REQUEST_DEPT = "";// 对应重庆字段 a870

		// 起草单位
		String DRAFT_DEPT = "";// 对应重庆字段 a209

		// 起草人
		String DRAFTER = "";// 对应重庆字段 none

		// （中国标准分类号）
		String CCS_CODE = "";// 对应重庆字段 a825

		// （国际标准分类号）
		String ICS_CODE = "";// 对应重庆字段 a826

		// 采标程度（分无采用NON、等同采用IDT、修改采用MOD三种情况）
		String ADOPT_GRADE = "";// 对应重庆字段 a800

		// 采用标准号
		String ADOPT_STANDARD_CODE = "";// 对应重庆字段 a800

		// 采用标准名称
		String ADOPT_STANDARD_NAME = "";// 对应重庆字段 none

		// 主题词
		String TOPIC = "";// 对应重庆字段 a835

		// 范围
		String SCOPE = "";// 对应重庆字段 a330

		// 规范性引用文件
		String REFERENCE_FILE = "";// 对应重庆字段 a502

		// 代替标准号
		String REPLACE_STANDARD = "";// 对应重庆字段 a461

		// 被代替标准号
		String REPLACED_STANDARD = "";// 对应重庆字段 a462

		// 标准状态（分现行有效YX、废止FZ、已正式废止ZF三种情况）
		String STATUS = "";// 对应重庆字段 a200

		// 废止日期（只到某日就行）
		Date CANCEL_TIME = null;// 对应重庆字段 a206

		// 过渡期（已月为单位，有废止日期时必须有此项）
		String INTERIM = "";// 对应重庆字段 none

		// 标准文本存放路径
		String TEXT_ADDRESS = "";// 对应重庆字段 none

		// 语种
		String LANGUAGE_CODE = "";// 对应重庆字段 a300

		// 标准页数
		String PAGE_NUMBER = "";// 对应重庆字段

		// 版本
		String EDITION = "";// 对应重庆字段

		// 归口单位
		String ATTACH_DEPT = "";// 对应重庆字段 a871

		// 摘要
		String SUMMARY = "";// 对应重庆字段

		// 最后操作时间
		String LASTED_MODIFY_TIME = "";// 对应重庆字段

		// 最后操作人
		String LASTED_USER = "";// 对应重庆字段

		// 分类等级1
		String CLASS_ONE_CODE = "";// 对应重庆字段

		// 分类等级2
		String CLASS_TWO_CODE = "";// 对应重庆字段

		// 分类等级3
		String CLASS_THREE_CODE = "";// 对应重庆字段

		// 分类等级4（ Q强制性，T推荐性，Z指导性）
		String CLASS_FOUR_CODE = "";// 对应重庆字段 a409

		// 备注
		String REMARK = "";// 对应重庆字段

		String oracleQueryStr1 = "ID,STANDARD_CODE,NAMECN,NAMEEN,ISSUE_TIME,ACT_TIME,"
				+ "ISSUE_DEPT,REQUEST_DEPT,DRAFT_DEPT,CCS_CODE,ICS_CODE,ADOPT_GRADE,ADOPT_STANDARD_CODE,"
				+ "TOPIC,SCOPE,REFERENCE_FILE,REPLACE_STANDARD,REPLACED_STANDARD,STATUS,CANCEL_TIME,LANGUAGE_CODE,PAGE_NUMBER,"
				+ "ATTACH_DEPT,CLASS_FOUR_CODE";

		String oracleQueryStr = "SELECT " + oracleQueryStr1 + " FROM "
				+ standardTable
				+ " where CLASS_THREE_CODE='DB11' and STATUS='YX'";

		log.info("oracleQueryStr: " + oracleQueryStr);

		// 开始从 oracle 中查询
		try {

			//oracle
			oracle_stmt = conn_oracle.createStatement();

			//mysql
			mysql_stmt_select = mysqlConn.createStatement();
			//mysql_stmt_insert = mysqlConn.createStatement();

			mysql_stmt_update = mysqlConn.createStatement();

			if (oracle_stmt.execute(oracleQueryStr)) {

				oracle_rs = oracle_stmt.getResultSet();

				while (oracle_rs.next()) {

					// ID 标准号ID
					ID = oracle_rs.getLong("ID"); // 对应重庆字段

					// 标准号
					STANDARD_CODE = oracle_rs.getString("STANDARD_CODE");// 对应重庆字段
					// a100
					if (STANDARD_CODE != null) {
						if (STANDARD_CODE.equals("")
								|| STANDARD_CODE.equals("null"))
							STANDARD_CODE = null;
						else
							STANDARD_CODE = "'" + STANDARD_CODE + "'";
					}

					// 标准中文名称
					NAMECN = oracle_rs.getString("NAMECN");// 对应重庆字段 a298
					if (NAMECN != null) {
						if (NAMECN.equals("") || NAMECN.equals("null"))
							NAMECN = null;
						else
							NAMECN = "'" + NAMECN + "'";
					}

					// 标准英文名称
					NAMEEN = oracle_rs.getString("NAMEEN");// 对应重庆字段 a302
					if (NAMEEN != null) {
						if (NAMEEN.equals("") || NAMEEN.equals("null"))
							NAMEEN = null;
						else
							NAMEEN = "'" + NAMEEN + "'";
					}

					// 发布日期（只到某日就行）
					ISSUE_TIME = oracle_rs.getDate("ISSUE_TIME");// 对应重庆字段
					// a101
					if (ISSUE_TIME != null) {
						if (ISSUE_TIME.equals("") || ISSUE_TIME.equals("null"))
							ISSUE_TIME = null;
					}

					// 实施日期（只到某日就行）
					ACT_TIME = oracle_rs.getDate("ACT_TIME");// 对应重庆字段 a205
					if (ACT_TIME != null) {
						if (ACT_TIME.equals("") || ACT_TIME.equals("null"))
							ACT_TIME = null;
					}

					// 发布单位
					ISSUE_DEPT = oracle_rs.getString("ISSUE_DEPT");// 对应重庆字段
					// a102
					if (ISSUE_DEPT != null) {
						if (ISSUE_DEPT.equals("") || ISSUE_DEPT.equals("null"))
							ISSUE_DEPT = null;
						else
							ISSUE_DEPT = "'" + ISSUE_DEPT + "'";
					}

					// 提出单位
					REQUEST_DEPT = oracle_rs.getString("REQUEST_DEPT");// 对应重庆字段
					// a870
					if (REQUEST_DEPT != null) {
						if (REQUEST_DEPT.equals("")
								|| REQUEST_DEPT.equals("null"))
							REQUEST_DEPT = null;
						else
							REQUEST_DEPT = "'" + REQUEST_DEPT + "'";
					}

					// 起草单位
					DRAFT_DEPT = oracle_rs.getString("DRAFT_DEPT");// 对应重庆字段
					// a209
					if (DRAFT_DEPT != null) {
						if (DRAFT_DEPT.equals("") || DRAFT_DEPT.equals("null"))
							DRAFT_DEPT = null;
						else
							DRAFT_DEPT = "'" + DRAFT_DEPT + "'";
					}

					// （中国标准分类号）
					CCS_CODE = oracle_rs.getString("CCS_CODE");// 对应重庆字段 a825
					if (CCS_CODE != null) {
						if (CCS_CODE.equals("") || CCS_CODE.equals("null"))
							CCS_CODE = null;
						else
							CCS_CODE = "'" + CCS_CODE + "'";
					}

					// （国际标准分类号）
					ICS_CODE = oracle_rs.getString("ICS_CODE");// 对应重庆字段 a826
					if (ICS_CODE != null) {
						if (ICS_CODE.equals("") || ICS_CODE.equals("null"))
							ICS_CODE = null;
						else
							ICS_CODE = "'" + ICS_CODE + "'";
					}

					// 采标程度（分无采用NON、等同采用IDT、修改采用MOD三种情况） 注：暂时不考虑
					// ADOPT_GRADE = oracle_rs.getString("ADOPT_GRADE");//
					// 对应重庆字段 a800
					// if(ADOPT_GRADE!=null){
					// if (ADOPT_GRADE.equals("") || ADOPT_GRADE.equals("null"))
					// ADOPT_GRADE=null;
					// else ADOPT_GRADE="'"+ADOPT_GRADE+"'";
					// }

					// 采用标准号 注：暂时不考虑
					// ADOPT_STANDARD_CODE = oracle_rs
					// .getString("ADOPT_STANDARD_CODE");// 对应重庆字段 a800
					// if(ADOPT_STANDARD_CODE!=null){
					// if (ADOPT_STANDARD_CODE.equals("") ||
					// ADOPT_STANDARD_CODE.equals("null"))
					// ADOPT_STANDARD_CODE=null;
					// else ADOPT_STANDARD_CODE="'"+ADOPT_STANDARD_CODE+"'";
					// }

					// 主题词
					TOPIC = oracle_rs.getString("TOPIC");// 对应重庆字段 a835
					if (TOPIC != null) {
						if (TOPIC.equals("") || TOPIC.equals("null"))
							TOPIC = null;
						else
							TOPIC = "'" + TOPIC + "'";
					}

					// 范围
					SCOPE = oracle_rs.getString("SCOPE");// 对应重庆字段 a330
					if (SCOPE != null) {
						if (SCOPE.equals("") || SCOPE.equals("null"))
							SCOPE = null;
						else
							SCOPE = "'" + SCOPE + "'";
					}

					// 规范性引用文件
					REFERENCE_FILE = oracle_rs.getString("REFERENCE_FILE");// 对应重庆字段
					// a502
					if (REFERENCE_FILE != null) {
						if (REFERENCE_FILE.equals("")
								|| REFERENCE_FILE.equals("null"))
							REFERENCE_FILE = null;
						else
							REFERENCE_FILE = "'" + REFERENCE_FILE + "'";
					}

					// 代替标准号
					REPLACE_STANDARD = oracle_rs.getString("REPLACE_STANDARD");// 对应重庆字段
					// a461
					if (REPLACE_STANDARD != null) {
						if (REPLACE_STANDARD.equals("")
								|| REPLACE_STANDARD.equals("null"))
							REPLACE_STANDARD = null;
						else
							REPLACE_STANDARD = "'" + REPLACE_STANDARD + "'";
					}

					// 被代替标准号
					REPLACED_STANDARD = oracle_rs
							.getString("REPLACED_STANDARD");// 对应重庆字段 a462
					if (REPLACED_STANDARD != null) {
						if (REPLACED_STANDARD.equals("")
								|| REPLACED_STANDARD.equals("null"))
							REPLACED_STANDARD = null;
						else
							REPLACED_STANDARD = "'" + REPLACED_STANDARD + "'";
					}

					// 标准状态（分现行有效YX、废止FZ、已正式废止ZF三种情况）
					STATUS = oracle_rs.getString("STATUS");// 对应重庆字段 a200
					if (STATUS != null) {
						if (STATUS.equals("") || STATUS.equals("null"))
							STATUS = null;
						else
							STATUS = "'" + STATUS + "'";
					}

					// 废止日期（只到某日就行）
					CANCEL_TIME = oracle_rs.getDate("CANCEL_TIME");// 对应重庆字段
					// a206
					if (CANCEL_TIME != null) {
						if (CANCEL_TIME.equals("")
								|| CANCEL_TIME.equals("null"))
							CANCEL_TIME = null;
					}

					// 语种
					LANGUAGE_CODE = oracle_rs.getString("LANGUAGE_CODE");// 对应重庆字段
					// a300
					if (LANGUAGE_CODE != null) {
						if (LANGUAGE_CODE.equals("")
								|| LANGUAGE_CODE.equals("null"))
							LANGUAGE_CODE = null;
						else {
							if (LANGUAGE_CODE.equals("CHINESE")) {
								LANGUAGE_CODE = "CH";
								LANGUAGE_CODE = "'" + LANGUAGE_CODE + "'";
							}
						}
					}

					// 页数 修改为 35P.;A4 格式
					// PAGE_NUMBER = new
					// Long(oracle_rs.getLong("PAGE_NUMBER")).toString();//
					PAGE_NUMBER = Long.toString(oracle_rs
							.getLong("PAGE_NUMBER"));
					// log.info("PAGE_NUMBER: "+PAGE_NUMBER);
					if (PAGE_NUMBER != null) {
						if (PAGE_NUMBER.equals("")
								|| PAGE_NUMBER.equals("null"))
							PAGE_NUMBER = null;
						else
							PAGE_NUMBER = "'" + PAGE_NUMBER.toString()
									+ "P.;A4'";
					}

					// 归口单位
					ATTACH_DEPT = oracle_rs.getString("ATTACH_DEPT");// 对应重庆字段
					// a871
					if (ATTACH_DEPT != null) {
						if (ATTACH_DEPT.equals("")
								|| ATTACH_DEPT.equals("null"))
							ATTACH_DEPT = null;
						else
							ATTACH_DEPT = "'" + ATTACH_DEPT + "'";
					}

					// 分类等级4,重庆要求和我单位标注方法一致(Q强制性，T推荐性，Z指导性）
					CLASS_FOUR_CODE = oracle_rs.getString("CLASS_FOUR_CODE");// 对应重庆字段
					// a409
					if (CLASS_FOUR_CODE != null) {
						if (CLASS_FOUR_CODE.equals("")
								|| CLASS_FOUR_CODE.equals("null"))
							CLASS_FOUR_CODE = null;
						else
							CLASS_FOUR_CODE = "'" + CLASS_FOUR_CODE + "'";
					}

					// log.info("");

					// 开始在 mysql 中的重庆格式表中寻找，如果记录已经存在，那么做 update 操作，如果不存在，做插入操作

					String mysqlQueryStr = "SELECT a001 FROM " + chongqingTable
							+ " where a100=" + STANDARD_CODE;
					log.info("mysqlQueryStr: " + mysqlQueryStr);

					// mysql 操作开始
					try {

						if (mysql_stmt_select.execute(mysqlQueryStr)) {

							mysql_select_rs = mysql_stmt_select.getResultSet();

							if (mysql_select_rs.next()) {// 存在记录，update.不用
								// while 循环, .next()
								// 一次，结果集指针已经下移一次

								countUpdateNumber++;

								// a204, a502,a825,a826 为手工改写项目，没有 update
								String mysqlUpdateStr1 = "update "
										+ chongqingTable + " set a298="
										+ NAMECN + ",a302=" + NAMEEN + ",a102="
										+ ISSUE_DEPT + ",a870=" + REQUEST_DEPT
										+ ",a209=" + DRAFT_DEPT + ",a825="
										+ CCS_CODE + ",a826=" + ICS_CODE
										+ ",a835=" + TOPIC + ",a330=" + SCOPE
										+ ",a461=" + REPLACE_STANDARD
										+ ",a462=" + REPLACED_STANDARD
										+ ",a200=" + STATUS + ",a300="
										+ LANGUAGE_CODE + ",a871="
										+ ATTACH_DEPT + ",a409="
										+ CLASS_FOUR_CODE;

								// 处理几个日期

								if (ISSUE_TIME != null)
									mysqlUpdateStr1 = mysqlUpdateStr1
											+ ",a101='" + ISSUE_TIME + "'";

								if (ACT_TIME != null)
									mysqlUpdateStr1 = mysqlUpdateStr1
											+ ",a205='" + ACT_TIME + "'";

								if (CANCEL_TIME != null)
									mysqlUpdateStr1 = mysqlUpdateStr1
											+ ",a206='" + CANCEL_TIME + "'";

								//	??

								//	com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: 'null' for column 'a206' at row 1
								//需要处理几个时间字段

								// 额外自动生成的几项，批量加入。
								// 非从平台库中读出 a204='北京市质量技术监督局'
								String mysqlUpdateStr2 = ",a104='CN-DB11',a203='北京市',a305="
										+ PAGE_NUMBER
										+ ",a390="
										+ NAMEEN
										+ ",a863='DB11',a866='GK',a885='CN'";

								String mysqlUpdateStr = mysqlUpdateStr1
										+ mysqlUpdateStr2 + " where a100="
										+ STANDARD_CODE;

								log.info("mysqlUpdateStr: " + mysqlUpdateStr);

								mysql_stmt_update.execute(mysqlUpdateStr);

							} else {// 不存在记录，insert

								countInsertNumber++;

								String mysqlInsertStr1 = "(a100,a298,a302,a102,a870,a209,a825,a826,a835,a330,a502,a461,a462,a200,a300,a871,a409,a104,a203,a204,a305,a390,a863,a866,a885,a101,a205,a206)";

								String mysqlInsertStr2 = "(" + STANDARD_CODE
										+ "," + NAMECN + "," + NAMEEN + ","
										+ ISSUE_DEPT + "," + REQUEST_DEPT + ","
										+ DRAFT_DEPT + "," + CCS_CODE + ","
										+ ICS_CODE + "," + TOPIC + "," + SCOPE
										+ "," + REFERENCE_FILE + ","
										+ REPLACE_STANDARD + ","
										+ REPLACED_STANDARD + ","
										+ STATUS
										+ ","
										+ LANGUAGE_CODE
										+ ","
										+ ATTACH_DEPT
										+ ","
										+ CLASS_FOUR_CODE
										+
										// 额外自动生成的几项，批量加入。
										// 非从平台库中读出
										",'CN-DB11'" + ",'北京市'"
										+ ",'北京市质量技术监督局'," + PAGE_NUMBER + ","
										+ NAMEEN + ",'DB11'" + ",'GK'"
										+ ",'CN'";

								if (ISSUE_TIME != null)
									mysqlInsertStr2 = mysqlInsertStr2 + ",'"
											+ ISSUE_TIME + "'";
								else
									mysqlInsertStr2 = mysqlInsertStr2 + ",null";

								if (ACT_TIME != null)
									mysqlInsertStr2 = mysqlInsertStr2 + ",'"
											+ ACT_TIME + "'";
								else
									mysqlInsertStr2 = mysqlInsertStr2 + ",null";

								if (CANCEL_TIME != null)
									mysqlInsertStr2 = mysqlInsertStr2 + ",'"
											+ CANCEL_TIME + "'";
								else
									mysqlInsertStr2 = mysqlInsertStr2 + ",null";

								mysqlInsertStr2 = mysqlInsertStr2 + ")";
								;

								String mysqlInsertStr = "insert into "
										+ chongqingTable + " "
										+ mysqlInsertStr1 + " values "
										+ mysqlInsertStr2;

								log.info("mysqlInsertStr: " + mysqlInsertStr);

								mysql_stmt_update.execute(mysqlInsertStr);

							}

							// while (oracle_rs.next()) {
						}

					} catch (SQLException ex) {
						log.info("exception in mysql query action.");
						ex.printStackTrace();
						mysql.closeDB(mysql_stmt_update);
						//mysql.closeDB(mysql_stmt_insert);
						mysql.closeDB(mysql_select_rs, mysql_stmt_select,
								mysqlConn);
						break;//结束 oracle 循环
					}// mysql 操作结束

				}// end oracle while

			}
			mysql.closeDB(mysql_stmt_update);
			//mysql.closeDB(mysql_stmt_insert);
			mysql.closeDB(mysql_select_rs, mysql_stmt_select, mysqlConn);

			oracle.closeDB(oracle_rs, oracle_stmt, conn_oracle);

			log.info("oracle query succeed.");
			log.info("countInsertNumber: " + countInsertNumber);
			log.info("countUpdateNumber: " + countUpdateNumber);

		} catch (SQLException ex) {
			log.info("exception in query action.");
			ex.printStackTrace();
			mysql.closeDB(mysql_stmt_update);
			mysql.closeDB(mysql_select_rs, mysql_stmt_select, mysqlConn);
			oracle.closeDB(oracle_rs, oracle_stmt, conn_oracle);
		}// 结束从 oracle 中查询
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		ChongQing cq = new ChongQing();
		cq.creatChongqing();

	}

}
